// 在ts中一个文件就是一个模块，必须对外输出
// ts + react
// 每个接口都需要此接口返回的数据的数据模型
import {MemberEntity} from "../model/member";
import axios, { AxiosResponse } from 'axios';


const githubURL = "https://api.github.com";
const githubMemberURL = `${githubURL}/orgs/lemoncode/members`;


/**
 * @ Member[]
 */
export const getMembersCollection = ():Promise<MemberEntity[]> => {

    return new Promise<MemberEntity[]>((resolve,reject) => {
        try {
            axios.get(githubMemberURL).then(res => {
                
                
                return resolve(mapMemberListApiToModel(res));
                
            })
            
        }catch(e) {
            reject(e);
        }
    })
}

// 
// AxiosResponse<T> 是 @types/axios 中封装的接口,T 约束的是response成员的类型
const mapMemberListApiToModel = ({data}:AxiosResponse<any[]>):MemberEntity[] => {
    
    return data.map(githubMember => ({
        id:githubMember.id,
        login:githubMember.login,
        avatar_url:githubMember.avatar_url
    }))
}